/**
 * WebSocket 连接诊断工具
 * 用于排查 LLM WebSocket 连接问题
 */

import { getWebSocketURL, testConnection } from './llmWebSocket'

/**
 * 运行完整的诊断检查
 */
export async function runDiagnostics() {
  console.log('═══════════════════════════════════════════════')
  console.log('🔍 LLM WebSocket 连接诊断工具')
  console.log('═══════════════════════════════════════════════')
  console.log('')
  
  const results = {
    url: getWebSocketURL(),
    timestamp: new Date().toISOString(),
    checks: []
  }
  
  // 检查 1: WebSocket API 支持
  console.log('✓ 检查 1: WebSocket API 支持')
  if (typeof WebSocket !== 'undefined') {
    console.log('  ✅ WebSocket API 可用')
    results.checks.push({
      name: 'WebSocket API 支持',
      status: 'pass',
      message: 'WebSocket API 可用'
    })
  } else {
    console.log('  ❌ WebSocket API 不可用')
    results.checks.push({
      name: 'WebSocket API 支持',
      status: 'fail',
      message: 'WebSocket API 不可用，浏览器可能不支持'
    })
    return results
  }
  console.log('')
  
  // 检查 2: URL 配置
  console.log('✓ 检查 2: WebSocket URL 配置')
  console.log('  URL:', results.url)
  const urlParts = results.url.match(/^(ws|wss):\/\/([^:]+):(\d+)(.*)$/)
  if (urlParts) {
    console.log('  协议:', urlParts[1])
    console.log('  主机:', urlParts[2])
    console.log('  端口:', urlParts[3])
    console.log('  路径:', urlParts[4])
    
    // 检查协议是否匹配页面协议
    if (typeof window !== 'undefined' && window.location.protocol === 'https:' && urlParts[1] === 'ws') {
      console.log('  ⚠️ 警告: 页面使用 HTTPS 但 WebSocket 使用 WS（不加密）')
      console.log('          这可能导致混合内容错误，建议使用 WSS')
      results.checks.push({
        name: 'URL 配置',
        status: 'warning',
        message: '协议不匹配：HTTPS页面使用WS连接可能被阻止'
      })
    } else {
      console.log('  ✅ URL 配置正确')
      results.checks.push({
        name: 'URL 配置',
        status: 'pass',
        message: 'URL 配置正确'
      })
    }
  } else {
    console.log('  ❌ URL 格式无效')
    results.checks.push({
      name: 'URL 配置',
      status: 'fail',
      message: 'URL 格式无效'
    })
  }
  console.log('')
  
  // 检查 3: 连接测试
  console.log('✓ 检查 3: 连接测试')
  console.log('  尝试连接到:', results.url)
  console.log('  超时设置: 5 秒')
  
  try {
    const testResult = await testConnection()
    console.log('  ✅ 连接成功')
    console.log('  耗时:', testResult.elapsed, 'ms')
    results.checks.push({
      name: '连接测试',
      status: 'pass',
      message: `连接成功，耗时 ${testResult.elapsed}ms`
    })
  } catch (error) {
    console.log('  ❌ 连接失败')
    console.log('  错误:', error.error)
    console.log('  耗时:', error.elapsed, 'ms')
    results.checks.push({
      name: '连接测试',
      status: 'fail',
      message: `连接失败: ${error.error}`
    })
  }
  console.log('')
  
  // 检查 4: 网络环境
  console.log('✓ 检查 4: 网络环境信息')
  if (typeof navigator !== 'undefined') {
    console.log('  在线状态:', navigator.onLine ? '在线' : '离线')
    console.log('  User Agent:', navigator.userAgent)
    results.checks.push({
      name: '网络状态',
      status: navigator.onLine ? 'pass' : 'fail',
      message: navigator.onLine ? '设备在线' : '设备离线'
    })
  }
  console.log('')
  
  // 总结
  console.log('═══════════════════════════════════════════════')
  console.log('📊 诊断总结')
  console.log('═══════════════════════════════════════════════')
  
  const passCount = results.checks.filter(c => c.status === 'pass').length
  const failCount = results.checks.filter(c => c.status === 'fail').length
  const warnCount = results.checks.filter(c => c.status === 'warning').length
  
  console.log('✅ 通过:', passCount)
  console.log('⚠️  警告:', warnCount)
  console.log('❌ 失败:', failCount)
  console.log('')
  
  if (failCount > 0) {
    console.log('🔧 故障排查建议:')
    console.log('')
    console.log('1. 检查服务器状态')
    console.log('   • 确认 AI 分析服务是否在 59.46.146.11:8091 运行')
    console.log('   • 可以使用以下命令测试:')
    console.log('     $ telnet 59.46.146.11 8091')
    console.log('     $ nc -zv 59.46.146.11 8091')
    console.log('')
    console.log('2. 检查网络连接')
    console.log('   • 测试网络是否可达:')
    console.log('     $ ping 59.46.146.11')
    console.log('   • 检查是否在同一网络或VPN中')
    console.log('')
    console.log('3. 检查防火墙设置')
    console.log('   • 确认端口 8091 是否开放')
    console.log('   • 检查服务器和客户端的防火墙规则')
    console.log('')
    console.log('4. 检查服务器配置')
    console.log('   • 确认 WebSocket 服务器正确监听端口')
    console.log('   • 检查跨域 (CORS) 配置是否允许连接')
    console.log('')
    console.log('5. 联系管理员')
    console.log('   • 如果以上步骤都无法解决，请联系系统管理员')
  } else {
    console.log('✅ 所有检查通过！WebSocket 连接应该可以正常工作。')
  }
  
  console.log('')
  console.log('═══════════════════════════════════════════════')
  
  return results
}

/**
 * 生成诊断报告（用于显示在UI中）
 */
export function generateDiagnosticReport(results) {
  let report = '# WebSocket 连接诊断报告\n\n'
  report += `时间: ${results.timestamp}\n`
  report += `URL: ${results.url}\n\n`
  
  report += '## 检查结果\n\n'
  results.checks.forEach((check, index) => {
    const icon = check.status === 'pass' ? '✅' : check.status === 'fail' ? '❌' : '⚠️'
    report += `${index + 1}. ${icon} ${check.name}: ${check.message}\n`
  })
  
  return report
}

export default {
  runDiagnostics,
  generateDiagnosticReport
}

